function ajax(time){
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
            if(time>5000){
                reject()
            }
            resolve()
        },time)
    })
}
// ajax(10000)
// ajax(8000)
// ajax(4000)
// ajax(5000)
// ajax(7000)
// ajax(9000)
class Limit{
    constructor(parallCount=2){
        this.tasks=[]//任务队列
        this.parallCount=parallCount//并发数量
        this.runningCount=0//当前运行数量
    }
    add(task){
        return new Promise((resolve,reject)=>{
            this.tasks.push({
                task,
                resolve,
                reject
            })
            this._run()
        })
    }
    _run(){
        if(this.runningCount<this.parallCount && this.tasks.length){
           const {task,resolve,reject}=this.tasks.shift()
           this.runningCount++
           task().then(resolve,reject).finally(()=>{
            this.runningCount--
            this._run()
           })
        }        
    }
}
const limit=new Limit(2)
function addTask(time,name){
    limit
    .add(()=>ajax(time))
    .then(()=>{
        console.log(`任务${name}完成`)    
    })
    .catch(()=>{
        console.log(`任务${name}失败`)
    })

}
addTask(10000,1)
addTask(4000,2)
addTask(2000,3)
addTask(7000,4)
addTask(1000,5)
